package com.hang.exception;

/**
 * Description: 错误码枚举类
 * User: hang
 * Date: 2022-11-10
 * Time: 10:38
 */
public enum MyExceptionEnum implements ErrorCode{
    //通用异常
    /** 未指明的异常 */
    UNSPECIFIED(500, "服务器异常，请稍后再试"),
    NO_SERVICE(404, "客户端页面丢失,服务器熔断"),


    //项目异常
    OBJECT_IS_NULL(1001,"传入对象为空"),
    ID_IS_NULL(1002,"传入ID为空"),
    LOGIN_FAIL(1003,"账号密码错误，登录失败"),
    MUST_FIELD_IS_NULL(1004,"必填表单项为空"),
    CODE_ERROR(1005,"验证码错误"),
    DATA_IS_DELETE(1006,"数据已经注销"),
    RETURN_DATA_NULL(1007,"返回数据为空"),
    USER_NO_USED(1008,"唯一号被使用"),
    USER_STATUS_CLOSE(1009,"用户状态已被禁用"),
    PASSWORD_EQUALS(1010,"新老密码一致,请重新输入新的密码"),
    PASSWORD_ERROR(1011,"原密码错误,请检查"),
    DATA_DOES_NOT_EXIST(1012,"数据不存在"),
    MODULE_HAS_DATA(1013,"该项目仍有模块,不允许删除"),
    FIlE_TYPE_ERROR(1022,"文件类型错误"),
    ONE_MORE_ADD(1030,"至少新增一条数据"),

    //模块删除异常
    DOCUMENT_EXISTS(1014,"模块存在文档,不允许删除"),
    FILE_EXISTS(1015,"模块存在文件,不允许删除"),
    BUG_EXISTS(1016,"模块存在故障,不允许删除"),
    TASK_EXISTS(1017,"模块存在任务,不允许删除"),
    ROLE_REMOVE_FAIL(1020,"仍有成员属于该角色,不允许删除"),
    DEPARTMENT_REMOVE_FAIL(1021,"仍有成员属于该部门,不允许删除"),
    ONE_MORE_DELETE(1026,"至少删除一条数据"),

    //文件删除异常
    FILE_DELETE_ERROR(1023,"文件不存在或你无权删除该文件"),
    NOTICE_DELETE_ERROR(1024,"公告不存在或你无权删除该公告"),

    //操作人异常
    OPERATOR_UPDATE_EXCEPTION(1018,"操作人异常,非本人创建的数据不允许更改"),
    OPERATOR_DELETE_EXCEPTION(1019,"操作人异常,非本人创建的数据不允许删除"),
    CREATE_RECEIVE_REPEAT(1025,"提报人和接收人不能是同一个人"),
    OPERATOR_TASK_EXCEPTION(1027,"操作人异常,非本人处理的任务无法处理"),
    OPERATOR_BUG_EXCEPTION(1033,"操作人异常,非本人处理的缺陷无法处理"),
    ITEM_MANAGER_EXCEPTION(1034,"您不是该项目管理员,无权查看申请列表"),

    //任务异常
    TASK_STATUS_SAME(1028,"任务状态没有改变"),
    TASK_PERSON_SAME(1029,"不能接取自己发布的任务"),

    //缺陷异常
    BUG_STATUS_SAME(1031,"缺陷状态没有改变"),
    BUG_PERSON_SAME(1032,"不能接取处理自己的缺陷"),

    //重复异常
    USER_NO_REPEATED(5000,"用户号已经被使用,请更换"),
    USER_PHONE_REPEATER(5001,"手机号已经被使用,请更换"),

    //时间异常
    DATETIME_NOT_MORE_THAN_2HOUR(6000,"上次申请时间在2小时之内,不允许频繁申请"),
    ;

    /** 错误码 */
    private final Integer code;

    /** 描述 */
    private final String description;

    /**
     * @param code 错误码
     * @param description 描述
     */
    private MyExceptionEnum(final Integer code, final String description) {
        this.code = code;
        this.description = description;
    }

    /**
     * 根据编码查询枚举。
     *
     * @param code 编码。
     * @return 枚举。
     */
    public static MyExceptionEnum getByCode(Integer code) {
        for (MyExceptionEnum value : MyExceptionEnum.values()) {
            if (code.intValue() == value.code.intValue()) {
                return value;
            }
        }
        return UNSPECIFIED;
    }

    /**
     * 枚举是否包含此code
     * @param code 枚举code
     * @return 结果
     */
    public static Boolean contains(Integer code){
        for (MyExceptionEnum value : MyExceptionEnum.values()) {
            if(code.intValue() == value.code.intValue()){
                return true;
            }
        }
        return  false;
    }

    @Override
    public Integer getCode() {
        return code;
    }

    @Override
    public String getDescription() {
        return description;
    }
}